[ci] Add workflow for 32-bit MSVC (windows-2025 x86)#1051
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1051 +/- ##
==========================================
+ Coverage 86.62% 86.65% +0.02%
==========================================
Files 23 23
Lines 5946 5948 +2
==========================================
+ Hits 5151 5154 +3
+ Misses 795 794 -1
... and 1 file with indirect coverage changes
🚀 New features to boost your workflow:
|
|
clang-tidy review says "All clean, LGTM! 👍" |
1 similar comment
|
clang-tidy review says "All clean, LGTM! 👍" |
|
clang-tidy review says "All clean, LGTM! 👍" |
| // Reads the object via `this`: layout is { vptr, int value } on every | ||
| // ABI we target, so the data member sits at sizeof(void*). | ||
| int read_value(int x) { | ||
| return *reinterpret_cast<int*>(reinterpret_cast<char*>(this) + |
There was a problem hiding this comment.
warning: do not use reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]
return *reinterpret_cast<int*>(reinterpret_cast<char*>(this) +
^| // Reads the object via `this`: layout is { vptr, int value } on every | ||
| // ABI we target, so the data member sits at sizeof(void*). | ||
| int read_value(int x) { | ||
| return *reinterpret_cast<int*>(reinterpret_cast<char*>(this) + |
There was a problem hiding this comment.
warning: do not use reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]
return *reinterpret_cast<int*>(reinterpret_cast<char*>(this) +
^| sizeof(void*)) + | ||
| x; | ||
| } | ||
| int foo() { return reinterpret_cast<A*>(this)->m_x + 10; } |
There was a problem hiding this comment.
warning: do not use reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]
int foo() { return reinterpret_cast<A*>(this)->m_x + 10; }
^| } | ||
| int foo() { return reinterpret_cast<A*>(this)->m_x + 10; } | ||
| int bar() { | ||
| B* b = reinterpret_cast<B*>(this); |
There was a problem hiding this comment.
warning: do not use reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]
B* b = reinterpret_cast<B*>(this);
^
vgvassilev
left a comment
There was a problem hiding this comment.
Consider fixing the clang-tidy suggestions.
c6facd7 to
f111aa6
Compare
On 32-bit Windows, linker-level names carry decorations the ORC
in-process resolver never undoes: '_' prefixes on cdecl symbols,
'@<argbytes>' suffixes on stdcall ones, and __imp_ dllimport pointer
indirections. ORC strips a global prefix for MachO only, so JIT'd
code referencing the CRT fails to materialize (JIT session error:
Symbols not found: [ _memset ] / __CxxThrowException@8 / ...) and
GetFunctionAddress misses symbols from libraries loaded at runtime.
Install a definition generator on the main JITDylib that normalizes
the decorations the way cling's platform::DLSym does and retries
against the loaded modules. C++ manglings ('?...') take no i386
decoration and stay with the default resolver. Cling mode is
unaffected; cling carries its own lookup.
Found by running the win32 suite under CPPINTEROP_LOG=1: the traced function returns through a bare return, so the tracing layer's unannotated-exit assert aborts the process the first time the API is called with tracing active (on any platform).
Add __thiscall to the bitcast type on _M_IX86 so the caller reproduces the compiler's virtual-dispatch ABI
|
clang-tidy review says "All clean, LGTM! 👍" |
Addressed those that seemed relevant |
Should surface failures fixed by #1048